﻿#define _CRT_SECURE_NO_WARNINGS 1

//#include <stdio.h>
//int main()
//{
//	int n = 10;
//	int m = 100;
//
//	int* p = &n;
//	*p = 20;
//	p = &m;
//
//	printf("%d\n",n);
//	printf("%d\n",m);
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int* p = &arr[0];
//
//	int i = 0;
//	for (i = 0; i <sz; i++)
//	{
//		printf("%d ", *p);
//		p++;
//	}
//
//	return 0;
//}


//#include <stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int* p = &arr[0];
//
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p+i));
//
//	}
//
//	return 0;
//}


//倒着打印
//#include <stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int* p = &arr[sz-1];
//
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *p);
//		p--;
//
//	}
//
//	return 0;
//}

//#include <stdio.h>
//#include <string.h>
//
//size_t my_strlen(char *p)  //size_t是无符号整型的意思
//{
//	int count = 0;
//	while (*p != '\0')   //\0的ASCLL码值就是0，所以这里直接写*p也可以
//	{
//		count++;
//		*p++;
//	}
//	return count;
//}
//
//int main()
//{
//	char arr[] = "abcdef";			//abcdef\0
//	size_t len = my_strlen(arr);   //arr == &arr[0]
//	printf("%zd\n",len);				//%zd专门用于打印size_t类型的值，这是C99标准引入的格式
//	return 0;
//}


//#include <stdio.h>
//#include <string.h>
//
//size_t my_strlen(char* p)		//size_t是无符号整型类型
//{
//	char* start = p;
//	char* end = p;
//	while (*end)   //\0的ASCLL码值就是0，所以这里直接写*p也可以
//	{
//		*end++;
//	}
//	return end - start;
//}
//
//int main()
//{
//	char arr[] = "abcdef";			//abcdef\0
//	size_t len = my_strlen(arr);   //arr == &arr[0]
//	printf("%zd\n", len);			//%zd专门用于打印size_t类型的值，这是C99标准引入的格式
//	return 0;
//}




//#include <stdio.h>
//void swap(int *px,int *py)
//{
//	int z = 0;
//	z = *px;
//	*px = *py;
//	*py = z;
//}
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d",&a,&b);
//	printf("交换前：a = %d  b = %d",a,b);
//
//	swap(&a,&b);
//	printf("交换后：a = %d  b = %d", a, b);
//	return 0;
//}



//#include <stdio.h>
//
//int main()
//{
//	int a = 10;
//	&a;//取出a的地址
//	printf("%p\n",&a);
//	return 0;
//}


//#include <stdio.h>
//int main()
//{
//	int a = 10;
//	int* pa = &a;  //取出a的地址并存储到指针变量pa中
//	return 0;
//}



//#include <stdio.h>
//
//int main()
//{
//	int a = 100;
//	int* pa = &a;
//	*pa = 0;
//	printf("%d",a);
//	return 0;
//}


 //代码1
//#include <stdio.h>
//int main()
//{
//	int n = 0x11223344;
//	int* pi = &n;
//	*pi = 0;
//	return 0;
//}

//代码2
//#include <stdio.h>
//int main()
//{
//	int n = 0x11223344;
//	char* pc = (char*)&n;
//	*pc = 0;
//	return 0;
//}



//#include <stdio.h>
//int main()
//{
//	int n = 10;
//	char* pc = (char*)&n;
//	int* pi = &n;
//	printf("%p\n", &n);
//	printf("%p\n", pc);
//	printf("%p\n", pc + 1);
//	printf("%p\n", pi);
//	printf("%p\n", pi + 1);
//	return  0;
//}


//#include <stdio.h>
//
//int main()
//{
//	int a = 10;
//	int* pa = &a;
//	char* pc = &a;
//	return 0;
//}



//#include <stdio.h>
//int main()
//{
//	int a = 10;
//	void* pa = &a;
//	void* pc = &a;
//	*pa = 10; //void *不能直接参与指针运算
//	*pc = 0;
//	return 0;
//}



//#include <stdio.h>
//int main()
//{
//	int m = 0;
//	m = 20;//m是可以修改的
//	const int n = 0;
//	n = 20;//n是不能被修改的
//	return 0;
//}


//#include <stdio.h>
//int main()
//{
//	const int n = 0;
//	printf("n = %d\n", n);
//	int* p = &n;
//	*p = 20;
//	printf("n = %d\n", n);
//
//	return 0;
//}





//#include <stdio.h>
////代码1
//void test1()
//{
//	int n = 10;
//	int m = 20;
//	int* p = &n;
//	*p = 20;//ok?
//	p = &m; //ok?
//}
//void test2()
//{
//	//代码2
//	int n = 10;
//	int m = 20;
//	const int* p = &n;
//	*p = 20;//ok?
//	p = &m; //ok?
//}
//void test3()
//{
//	int n = 10;
//	int m = 20;
//	int* const p = &n;
//	*p = 20; //ok?
//	p = &m;  //ok?
//}
//
//void test4()
//{
//	int n = 10;
//	int m = 20;
//	int const* const p = &n;
//	*p = 20; //ok?
//	p = &m;  //ok?
//}
//int main()
//{
//	//测试⽆const修饰的情况
//		test1();
//	//测试const放在*的左边情况
//		test2();
//	//测试const放在*的右边情况
//		test3();
//	//测试*的左右两边都有const
//		test4();
//	return 0;
//}





//#include <stdio.h>
//#include <assert.h>
//int my_strlen(const char *str)
//{
//	int count = 0;
//	assert(str);
//	while (*str)
//	{
//		count++;
//		str++;
//	}
//	return count;
//}
//
//int main()
//{
//	int len = my_strlen("abcdef");
//	printf("%d",len);
//	return 0;
//}


//#include <stdio.h>
//void Swap1(int x, int y)
//{
//	int tmp = x;
//	x = y;
//	y = tmp;
//}
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	Swap1(a, b);
//	printf("交换前：a = % d b = % d\n", a, b);
//	printf("交换后：a = % d b = % d\n", a, b);
//	return 0;
//}



